package com.itlong.cloud.commons.dao;

import com.itlong.cloud.POJO.PO.*;
import com.itlong.cloud.POJO.VO.app.AppCloudIntercomsVO;
import com.itlong.cloud.POJO.VO.property.PushCloudVisitorInfoDeviceVO;
import com.itlong.cloud.POJO.VO.property.PushFaceInfoCommanDataVO;
import com.itlong.cloud.POJO.VO.property.PushProjectCommanDataVO;
import com.itlong.cloud.POJO.VO.property.PushRoomCommanDataVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      硬件响应变更通知数据访问接口
 * </desc>
 *
 * @createDate 2017/12/04
 */
@Mapper
@Repository
public interface ICloudTalkPushCloudIntercomChangeLogDao extends IAbstractBaseDao<PushCloudIntercomChangeLogPO>{
    /**
     * <desc>
     *      保存
     * </desc>
     *
     * @param params
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/04
     */
    Integer save(Map<String, Object> params);

    /**
     * <desc>
     *      批量保存
     * </desc>
     *
     * @param list
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/04
     */
    Integer batchSave(@Param("list") List<PushCloudIntercomChangeLogPO> list);

    /**
     * <desc>
     *      批量保存带更新时间
     * </desc>
     *
     * @param list
     * @return
     * @author Qiang.S
     * @createDate 2018/09/28
     */
    Integer batchSaveAndUpgradeTime(@Param("list") List<PushCloudIntercomChangeLogPO> list);

    /**
     * <desc>
     *      通过项目id查询项目信息
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/05
     */
    PushProjectCommanDataVO getProjectById(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取用户已认证的房屋信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/06
     */
    List<RoomInfoPO> getUserRoomsInfos(@Param("userId") String userId,
                                       @Param("projectId") String projectId);

    /**
     * <desc>
     *      根据设备唯一码获取sn
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/06
     */
    String getSnByDeviceUnique(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      查询用户的项目信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/06
     */
    Map<String,Object> getPushUserProjectInfo(@Param("userId") String userId,
                                              @Param("projectId") String projectId,
                                              @Param("roomId") String roomId);

    /**
     * <desc>
     *      通过设备唯一码获取设备详情
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/06
     */
    Map<String,Object> getPushDeviceInfo(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *      获取门口机云对讲设备对应类型的多媒体信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @param type 类型 1文字 2图片 3视频
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/07
     */
    List<Map<String,Object>> getGates(@Param("deviceUnique") String deviceUnique, @Param("type") String type);

    /**
     * <desc>
     *      获取围墙机云对讲设备对应类型的多媒体信息
     * </desc>
     *
     * @param deviceUnique 设备唯一码
     * @param type 类型 1文字 2图片 3视频
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/07
     */
    List<Map<String,Object>> getWalls(@Param("deviceUnique") String deviceUnique, @Param("type") String type);

    /**
     * <desc>
     *      查询项目下的所有云对讲设备
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/07
     */
    List<Map<String,Object>> getCloudsByProjectId(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据房间id查询房间详情
     * </desc>
     *
     * @param roomId 房间id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/09
     */
    PushRoomCommanDataVO getPushRoomInfoByRoomId(@Param("roomId") String roomId);

    /**
     * <desc>
     *      获取用户项目房间下的云对讲设备信息
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/19
     */
    List<AppCloudIntercomsVO> getUserClouds(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     *      通过项目id查询人脸库信息
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Qiang.S
     * @createDate 2018/05/25
     */
    PushFaceInfoCommanDataVO getFaceInfoById(@Param("projectId") String projectId);

    /**
     * <desc>
     *      根据访客信息编号查询设备信息
     * </desc>
     *
     * @param vFaceId 百度中的人脸编号
     * @return
     * @author Qiang.S
     * @createDate 2019/02/28
     */
    List<PushCloudVisitorInfoDeviceVO> getVisitorDeviceInfo(String vFaceId);

    /**
     * <desc>
     *      根据设备编号查询云对讲版本号和iotkey
     * </desc>
     *
     * @param deviceUnique 设备编号
     * @return
     * @author Qiang.S
     * @createDate 2019/07/05
     */
    ProductTypePO getIntercomVersonIotkey(@Param("deviceUnique") String deviceUnique);

    /**
     * <desc>
     *     根据房间ID查询对应的楼栋与单元ID
     * </desc>
     * @param roomId
     * @return
     * @author cuiduanwu
     * @createDate 2018-1-18
     */
    String deviceChangeLogGetBuildAndUnitIdByRoomId(@Param("roomId") String roomId);

    
    
    /**
    *<desc>
    *  根据设备唯一标识符查询电梯正背门信息
    *</desc>
    *
    * @Author  chengshican
    * @Date   \ 15:21
    * @Param  
    * @Return      
    * @Exception   
    * 
    */
    Map<String,Object> getElevatorByDeviceUnique(@Param("deviceUnique") String deviceUnique);
}
